import os
import csv
from xml.etree.ElementTree import parse

###################################
##### defining class "parser" #####
###################################

class parser:

    def __init__(self, x):
        self.appnumber = str(x[:-4])
        self.year = self.appnumber[2:6]
        self.xmldir = 'D:\\KIPRIS\\RND\\'+str(self.year) + '\\' + str(self.appnumber) + ".xml"
        try :
            tree = parse(self.xmldir)
            self.parse_error = 0
        except :
            self.parse_error = 1
        if self.parse_error ==0:
            tree = parse(self.xmldir)
            self.note = tree.getroot()
        else :
            self.note = None
    
    def RND(self):
        if self.note != None:
            rndlist = self.note.find("body").find("items").findall("patentRndInfo")
            for i in range(len(rndlist)):
                ##### 순위 #####
                order = i+1
                ##### RND Task Number #####
                if rndlist[i].find("ResearchDevelopmentTaskNumber") != None:
                    RndTaskNumber = rndlist[i].find("ResearchDevelopmentTaskNumber").text
                else :
                    RndTaskNumber=''
                ##### Research Ministry Name #####
                if rndlist[i].find("ResearchMinistriesandofficesName") != None:
                    Ministry = rndlist[i].find("ResearchMinistriesandofficesName").text
                else :
                    Ministry=''
                ##### RND Project Name #####
                if rndlist[i].find("ResearchProjectName") != None:
                    Project = rndlist[i].find("ResearchProjectName").text
                else :
                    Project =''
                ##### Research Task Name #####
                if rndlist[i].find("ResearchTaskName") != None:
                    ResearchTask = rndlist[i].find("ResearchTaskName").text
                else :
                    ResearchTask =''
                ##### Management Institution #####
                if rndlist[i].find("ManagementInstitutionName") != None:
                    Institution = rndlist[i].find("ManagementInstitutionName").text
                else :
                    Institution =''
                ##### RND Term #####
                if rndlist[i].find("ResearchDevelopmentTerm") != None:
                    Term = rndlist[i].find("ResearchDevelopmentTerm").text
                else :
                    Term =''
                ##### Research Management Institution #####
                if rndlist[i].find("ResearchManagementFulltextInstitutionName") != None:
                    Institution2 = rndlist[i].find("ResearchManagementFulltextInstitutionName").text
                else :
                    Institution2 =''
                ##### Research Task Contribution #####
                if rndlist[i].find("ResearchTaskContributionrate") != None:
                    Contribution = rndlist[i].find("ResearchTaskContributionrate").text
                else :
                    Contribution =''
                row = [str(self.appnumber), str(order), str(RndTaskNumber), str(Ministry), str(Project), str(ResearchTask), str(Institution), str(Term), str(Institution2), str(Contribution)]
                wrrnd.writerow(row)
        else :
            pass

################################################################################################################################
################################################################################################################################
################################################################################################################################

errorlist = []

for year in range(1948 , 2017):

    ###################################
    ##### Opening Blank csv files #####
    ###################################

    rnd = open('D:\\KIPRIS\\RND\\csv\\RND_' +str(year) + '.csv', 'w', encoding='utf-8', newline='')
    wrrnd = csv.writer(rnd)
    wrrnd.writerow(["Appnumber", "Order", "RndTaskNumber", "Ministry", "Project", "ResearchTask", "Institution", "Term", " Institution2", "Contribution"])

    ############################
    ##### Parsing, Writing #####
    ############################

    xmllist = os.listdir('D:\\KIPRIS\\RND\\'+str(year))
    for files in xmllist:
        a = parser(files)
        if a.parse_error ==1:
            errorlist.append(a.appnumber)
        else:
            pass
        a.RND()
        print(str(a.appnumber))

    #############################
    ##### Closing csv files #####
    #############################

    rnd.close()


############################
##### Saving errorlist #####
############################

with open("D:\\KIPRIS\\RND\\csv\\errorlist.csv", "w", newline = '') as errorlist_csv:
    wr = csv.writer(errorlist_csv)
    wr.writerow(errorlist)